package com.artevivo.managedBeans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.RequestScoped;

import org.springframework.stereotype.Controller;

import com.artevivo.comparadores.ComparadorCursosPorDiasHoras;
import com.artevivo.entidades.Curso;
import com.artevivo.entidades.Especialidad;
import com.artevivo.entidades.Estilo;
import com.artevivo.services.CursoService;
import com.artevivo.services.EspecialidadService;
import com.artevivo.services.EstiloPorEspecialidadService;
import com.artevivo.services.EstiloService;

@Controller(value = "cursoMB")
@RequestScoped
public class CursoMB implements Serializable {

    private static final long serialVersionUID = 4834257359564288956L;

    private String horaSeleccionada;

    private String diaSeleccionado;

    private String salaSeleccionada;

    private Curso cursoSeleccionado;

    private Estilo estiloSeleccionado;

    private String selectedEspecialidadId;

    private String selectedEstiloId;

    @Resource
    private SessionManagedBean sessionMB;

    @Resource
    private EspecialidadService especialidadService;

    @Resource
    private EstiloService estiloService;

    @Resource
    private EstiloPorEspecialidadService estiloPorEspecialidadService;

    @Resource
    private CursoService cursoService;

    public String getHoraSeleccionada() {
        return horaSeleccionada;
    }

    public void setHoraSeleccionada(String horaSeleccionada) {
        this.horaSeleccionada = horaSeleccionada;
    }

    public List<String> getHoras() {
        List<String> horas = new ArrayList<String>();
        horas.add("16:30-17:25");
        horas.add("17:30-18:25");
        horas.add("18:30-19:25");
        horas.add("19:30-20:25");
        horas.add("20:30-21:25");
        return horas;
    }

    public String getDiaSeleccionado() {
        return diaSeleccionado;
    }

    public void setDiaSeleccionado(String diaSeleccionado) {
        this.diaSeleccionado = diaSeleccionado;
    }

    public List<String> getDias() {
        List<String> dias = new ArrayList<String>();
        dias.add("Lunes");
        dias.add("Martes");
        dias.add("Miercoles");
        dias.add("Jueves");
        dias.add("Viernes");
        return dias;
    }

    public String getSalaSeleccionada() {
        return salaSeleccionada;
    }

    public void setSalaSeleccionada(String salaSeleccionada) {
        this.salaSeleccionada = salaSeleccionada;
    }

    public List<String> getSalas() {
        List<String> salas = new ArrayList<String>();
        salas.add("Sala 1");
        salas.add("Sala 2");
        salas.add("Sala 3");
        salas.add("Sala 4");
        salas.add("Sala 5");
        return salas;
    }

    public List<Curso> cursosPorSala(String sala) {
        List<Curso> result = cursoService.obtenerCursosPorSala(sessionMB.getSelectedAnyo(), sala);
        Comparator<Curso> comparator = new ComparadorCursosPorDiasHoras();
        Collections.sort(result, comparator);
        return result;
    }

    public void borrar() {
        try {
            cursoService.borrarCurso(cursoSeleccionado);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void anyadir() {
        try {
            cursoService.anyadirCurso(sessionMB.getSelectedAnyo(), selectedEspecialidadId, selectedEstiloId, diaSeleccionado, horaSeleccionada,
                    salaSeleccionada);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Curso getCursoSeleccionado() {
        return cursoSeleccionado;
    }

    public void setCursoSeleccionado(Curso cursoSeleccionado) {
        this.cursoSeleccionado = cursoSeleccionado;
    }

    public List<Especialidad> getEspecialidadsList() {
        List<Especialidad> res = new ArrayList<Especialidad>();
        try {
            res = especialidadService.obtenerEspecialidades();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public Estilo getEstiloSeleccionado() {
        return estiloSeleccionado;
    }

    public void setEstiloSeleccionado(Estilo estiloSeleccionado) {
        this.estiloSeleccionado = estiloSeleccionado;
    }

    public List<Estilo> getEstilosListByEspecialidadId(String subjectID) {
        List<Estilo> TopicsList = new ArrayList<Estilo>();

        if (subjectID.length() != 0) {
            try {
                TopicsList = estiloPorEspecialidadService.obtenerEstilosPorEspecialidad(especialidadService.obtenerEspecialidadPorID(new Long(
                        subjectID)));

            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
        }
        return TopicsList;
    }

    public String getSelectedEspecialidadId() {
        return selectedEspecialidadId;
    }

    public void setSelectedEspecialidadId(String selectedEspecialidadId) {
        this.selectedEspecialidadId = selectedEspecialidadId;
    }

    public String getSelectedEstiloId() {
        return selectedEstiloId;
    }

    public void setSelectedEstiloId(String selectedEstiloId) {
        this.selectedEstiloId = selectedEstiloId;
    }

}
